﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ConfeccionesJR.Entites;
using ConfeccionesJR.Repository;
using Microsoft.Practices.Unity;

namespace ConfeccionesJR.BussinesLogic
{
    public class MaterialBL : IMaterialBL
    {
        [Dependency]
        public IMaterialRepository materialRepository { get; set; }

        public List<MATERIAL> GetAllFromMaterial()
        {
            return materialRepository.GetAllFromMaterial();
        }

        public List<MATERIAL> GetFromMaterialByDescripcion(string descripcion)
        {
            return materialRepository.GetFromMaterialByDescripcion(descripcion);
        }

        public List<MATERIAL> GetAllFromMaterialsByDescripcionAndStockBajo(string descripcion, int minStock)
        {
            return materialRepository.GetAllFromMaterialsByDescripcionAndStockBajo(descripcion, minStock);
        }

        public MATERIAL GetOneMaterialByDescripcion(string codigo)
        {
            return materialRepository.GetOneMaterialByDescripcion(codigo);
        }

        public MATERIAL GetFromMaterialById(int id)
        {
            return materialRepository.GetFromMaterialById(id);            
        }

        public void AddMaterial(MATERIAL Material)
        {
            var duplicidad = materialRepository.ExisteDuplicidadMatDescripcion(Material.Descripcion, Material.Id);

            if (!duplicidad)
            {
                var msg = "";
                var ok = Material.Validate(out msg);

                if (ok)
                {
                    materialRepository.AddMaterial(Material);
                }
                else
                {
                    throw new Exception(msg);
                }
            }
            else
            {
                var error = string.Format("Ya existe un Material con la misma descripción\n" + "Material: " + Material.Descripcion);
                throw new Exception(error);
            }          
        }

        public void UpdateMaterial(MATERIAL Material)
        {
            var duplicidad = materialRepository.ExisteDuplicidadMatDescripcion(Material.Descripcion, Material.Id);
            
	        if (!duplicidad)
	        {
                var msg = "";
                var ok = Material.Validate(out msg);
                if (ok)
                {
                    materialRepository.UpdateMaterial(Material);
                }
                else
                {
                    throw new Exception(msg);
                }
            }
            else
            {
                var error = string.Format("Ya existe un Material con la misma descripción: \n{0}",Material.Descripcion);
                throw new Exception(error);
            }
                        
        }


        public bool ExisteDuplicidadMatDescripcion(string MaterialDescripcion, int id)
        {
            return materialRepository.ExisteDuplicidadMatDescripcion(MaterialDescripcion, id);
        }
    }
}
